﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
//using QLPKWeb.Models.LinQ.ChamCong;
using QLPKWeb.Models.FormBean.NhanVienModel;
using System.Web.Mvc;
//using QLPKWeb.Models.FormBean.ChamCongModel;

namespace QLPKWeb.BussinessDelegate.NhanVienDelegate
{
    public class ThoiViecDelegate
    {
        #region Private Member

        CommonDelegate.CommonDelegate commonDelegate = new CommonDelegate.CommonDelegate();
        //ChamCongDelegate.ChamCongServiceDelegate chamCongServiceDelegate = new ChamCongDelegate.ChamCongServiceDelegate();
        //DBChamCongDataContext dBChamCong = new DBChamCongDataContext();
        readonly int _currentUserId = Convert.ToInt32(HttpContext.Current.Session["USERID"].ToString());

        #endregion

        #region Get

        //#region Bảng tb_NhanVien

        //public IQueryable<hs_NhanVien> QueryGetAllNhanVien()
        //{
        //    return dBChamCong.hs_NhanViens.Where(p => p.IsDelete == false || p.IsDelete == null);
        //}

        //public hs_NhanVien GetNhanVienById(int? idNhanVien)
        //{
        //    return dBChamCong.hs_NhanViens.SingleOrDefault(p => p.Id == idNhanVien);
        //}

        //#endregion

        #endregion

        #region Set

        //public bool SaveThoiViec(ThoiViecForm form)
        //{
        //    //1. Lưu lại thông tin Nhân Viên
        //    //2. Cập nhật lại Dữ liệu cho Bảng CC_ChamCongNgayNhanVien
        //    //      Từ Ngày Bắt Đầu Nghỉ cho đến cuối tháng sẽ tự động lưu vào Ký Hiệu NVCLV (Những Ngày tiếp theo của tháng sẽ là Nghỉ Việc)

        //    using (var transaction = new System.Transactions.TransactionScope(System.Transactions.TransactionScopeOption.RequiresNew))
        //    {
        //        try
        //        {
        //            hs_NhanVien objNhanVien = GetNhanVienById(form.IdNhanVien);

        //            objNhanVien.SoGioDuocHuongThoiViec = Convert.ToInt32(form.SoGioDuocHuongThoiViec);
        //            objNhanVien.NgayNghiViec = commonDelegate.ConvertStringToDateTime(form.NgayNghiViec);
        //            objNhanVien.LyDoThoiViec = !string.IsNullOrEmpty(form.LyDoThoiViec) ? form.LyDoThoiViec.Trim() : string.Empty;

        //            objNhanVien.UpdateBy = _currentUserId;
        //            objNhanVien.UpdateDate = DateTime.Now;

        //            chamCongServiceDelegate.LuuChamCongThoiViec(form.IdNhanVien, objNhanVien.NgayNghiViec.Value);

        //            dBChamCong.SubmitChanges();
        //            transaction.Complete();
        //            transaction.Dispose();
        //            return true;
        //        }
        //        catch (Exception)
        //        {
        //            return false;
        //        }
        //    }
        //}

        #endregion

        #region Build

        //public ThoiViecForm BuildThoiViecNhanVien(int idNhanVien)
        //{
        //    var form = new ThoiViecForm();
        //    var objNhanVien = GetNhanVienById(idNhanVien);
        //    if (objNhanVien != null)
        //    {
        //        //Build Thông Tin Cá Nhân
        //        form.IdNhanVien = objNhanVien.Id;
        //        form.SoThe = objNhanVien.SoThe;
        //        form.HoTen = chamCongServiceDelegate.GhepHoVaTen(objNhanVien.Ho, objNhanVien.Ten);
        //        form.SoGioDuocHuongThoiViec = objNhanVien.SoGioDuocHuongThoiViec.ToString();
        //        form.NgayNghiViec = objNhanVien.NgayNghiViec != null ? commonDelegate.ConvertDateTimeToString(objNhanVien.NgayNghiViec) : commonDelegate.ConvertDateTimeToString(DateTime.Now);
        //        form.LyDoThoiViec = objNhanVien.LyDoThoiViec;

        //        //Tổng hợp lại Chấm Công trước  ******************
        //        chamCongServiceDelegate.TinhTongHopVaLuuLaiDuLieuChamCongByThangNamVaIdNhanVien(DateTime.Today.Month, DateTime.Today.Year, idNhanVien);

        //        var ccChamCongNgayNhanVien = chamCongServiceDelegate.GetChamCongNgayNhanVienByThangNamVaIdNhanVien(DateTime.Today.Month, DateTime.Today.Year, idNhanVien);
        //        var ccnhanVienForm = new ChamCongNgayNhanVienForm();

        //        ////Build Dữ liệu chấm công của nhân viên trong một tháng
        //        //ccnhanVienForm.ListChamCongNgay = chamCongServiceDelegate.GetChamCongNgayVaTangCaByThangNamVaIdNhanVien(DateTime.Today.Month, DateTime.Today.Year, idNhanVien);
        //        ccnhanVienForm.TongThuViec = Convert.ToByte(ccChamCongNgayNhanVien.TongThuViec);
        //        ccnhanVienForm.TongNghiKhamThai = Convert.ToByte(ccChamCongNgayNhanVien.TongNghiKhamThai);
        //        ccnhanVienForm.TongNghiCoPhep = Convert.ToByte(ccChamCongNgayNhanVien.TongNghiCoPhep);
        //        ccnhanVienForm.TongNghiKhongPhep = Convert.ToByte(ccChamCongNgayNhanVien.TongNghiKhongPhep);
        //        ccnhanVienForm.TongNghiConBenh = Convert.ToByte(ccChamCongNgayNhanVien.TongNghiConBenh);
        //        ccnhanVienForm.TongNghiBenh = Convert.ToByte(ccChamCongNgayNhanVien.TongNghiBenh);
        //        ccnhanVienForm.TongNghiThaiSan = Convert.ToByte(ccChamCongNgayNhanVien.TongNghiThaiSan);
        //        ccnhanVienForm.TongNghiThaiSan = Convert.ToByte(ccChamCongNgayNhanVien.TongNghiThaiSan);
        //        ccnhanVienForm.TongNghiPhepNam = ccChamCongNgayNhanVien.TongNghiPhepNam;
        //        ccnhanVienForm.TongNghiCheDo = Convert.ToByte(ccChamCongNgayNhanVien.TongNghiCheDo);
        //        ccnhanVienForm.TongNghiLe = Convert.ToByte(ccChamCongNgayNhanVien.TongNghiLe);
        //        ccnhanVienForm.TongNghiKhongCoViec = Convert.ToByte(ccChamCongNgayNhanVien.TongNghiKhongCoViec);
        //        ccnhanVienForm.TongSoGioTangCa = Convert.ToByte(ccChamCongNgayNhanVien.TongSoGioTangCa);
        //        ccnhanVienForm.TongVangMat = Convert.ToByte(ccChamCongNgayNhanVien.TongVangMat);
        //        ccnhanVienForm.TongSoNgayLamViec = ccChamCongNgayNhanVien.TongSoNgayLamViec;
        //        ccnhanVienForm.TongCaDem = ccChamCongNgayNhanVien.TongCaDem;
        //        ccnhanVienForm.GhiChu = ccChamCongNgayNhanVien.GhiChu;

        //        form.ChamCongNgayNhanVien = ccnhanVienForm;
        //        form.LichChamCong = BuildLichChamCongThang(DateTime.Today.Month, DateTime.Today.Year, ccChamCongNgayNhanVien);
        //    }
        //    return form;
        //}

        //public IList<ChamCongTuanForm> BuildLichChamCongThang(int thang, int nam, CC_ChamCongNgayNhanVien objChamCongNgayNhanVien)
        //{
        //    var lstChamCongTuan = new List<ChamCongTuanForm>();
        //    DateTime ngayDauThang = commonDelegate.ConvertToDateTime(1, thang, nam).Value;

        //    ChamCongTuanForm tuanDauTien = new ChamCongTuanForm();
        //    ChamCongTuanForm tuanThuHai = new ChamCongTuanForm();
        //    ChamCongTuanForm tuanThuBa = new ChamCongTuanForm();
        //    ChamCongTuanForm tuanThuTu = new ChamCongTuanForm();
        //    ChamCongTuanForm tuanThuNam = new ChamCongTuanForm();

        //    tuanDauTien.ThuTrongTuan = BuildLichTrongTuan(ngayDauThang);
        //    tuanThuHai.ThuTrongTuan = BuildLichTrongTuan(tuanDauTien.ThuTrongTuan.Last().AddDays(1));
        //    tuanThuBa.ThuTrongTuan = BuildLichTrongTuan(tuanThuHai.ThuTrongTuan.Last().AddDays(1));
        //    tuanThuTu.ThuTrongTuan = BuildLichTrongTuan(tuanThuBa.ThuTrongTuan.Last().AddDays(1));
        //    tuanThuNam.ThuTrongTuan = BuildLichTrongTuan(tuanThuTu.ThuTrongTuan.Last().AddDays(1));

        //    foreach (var item in tuanDauTien.ThuTrongTuan)
        //    {
        //        if (item.Month == thang && item.Year == nam)
        //            tuanDauTien.ChamCongNgayTrongTuan.Add(chamCongServiceDelegate.GetChamCongNgayVaTangCaByChamCongNgayVaNgay(objChamCongNgayNhanVien, item.Day));
        //        else
        //        {
        //            tuanDauTien.ChamCongNgayTrongTuan.Add(new NgayTrongThang());
        //        }
        //        tuanDauTien.ThuTrongTuanString.Add(item.ToString("dd/MM/yyyy"));
        //    }
        //    foreach (var item in tuanThuHai.ThuTrongTuan)
        //    {
        //        tuanThuHai.ChamCongNgayTrongTuan.Add(chamCongServiceDelegate.GetChamCongNgayVaTangCaByChamCongNgayVaNgay(objChamCongNgayNhanVien, item.Day));
        //        tuanThuHai.ThuTrongTuanString.Add(item.ToString("dd/MM/yyyy"));
        //    }
        //    foreach (var item in tuanThuBa.ThuTrongTuan)
        //    {
        //        tuanThuBa.ChamCongNgayTrongTuan.Add(chamCongServiceDelegate.GetChamCongNgayVaTangCaByChamCongNgayVaNgay(objChamCongNgayNhanVien, item.Day));
        //        tuanThuBa.ThuTrongTuanString.Add(item.ToString("dd/MM/yyyy"));
        //    }
        //    foreach (var item in tuanThuTu.ThuTrongTuan)
        //    {
        //        tuanThuTu.ChamCongNgayTrongTuan.Add(chamCongServiceDelegate.GetChamCongNgayVaTangCaByChamCongNgayVaNgay(objChamCongNgayNhanVien, item.Day));
        //        tuanThuTu.ThuTrongTuanString.Add(item.ToString("dd/MM/yyyy"));
        //    }
        //    foreach (var item in tuanThuNam.ThuTrongTuan)
        //    {
        //        if (item.Month == thang && item.Year == nam)
        //            tuanThuNam.ChamCongNgayTrongTuan.Add(chamCongServiceDelegate.GetChamCongNgayVaTangCaByChamCongNgayVaNgay(objChamCongNgayNhanVien, item.Day));
        //        else
        //        {
        //            tuanThuNam.ChamCongNgayTrongTuan.Add(new NgayTrongThang());
        //        }
        //        tuanThuNam.ThuTrongTuanString.Add(item.ToString("dd/MM/yyyy"));
        //    }

        //    lstChamCongTuan.Add(tuanDauTien);
        //    lstChamCongTuan.Add(tuanThuHai);
        //    lstChamCongTuan.Add(tuanThuBa);
        //    lstChamCongTuan.Add(tuanThuTu);
        //    lstChamCongTuan.Add(tuanThuNam);

        //    return lstChamCongTuan;
        //}

        ///// <summary>
        ///// Build Lịch trong tuần (Bắt đầu từ thứ 2 -> Chủ Nhật)
        ///// </summary>
        ///// <param name="ngayTrongTuan"></param>
        ///// <returns></returns>
        //public IList<DateTime> BuildLichTrongTuan(DateTime ngayTrongTuan)
        //{
        //    IList<DateTime> result = new List<DateTime>();

        //    DateTime ngayDauTuan = ngayTrongTuan;

        //    while (ngayDauTuan.DayOfWeek != DayOfWeek.Monday)
        //    {
        //        ngayDauTuan = ngayDauTuan.AddDays(-1);
        //    }

        //    for (int indexNgay = 0; indexNgay < 7; indexNgay++)
        //    {
        //        result.Add(ngayDauTuan.AddDays(indexNgay));
        //    }

        //    return result;
        //}

        #endregion
    }

    //public class ChamCongTuanForm
    //{
    //    public ChamCongTuanForm()
    //    {
    //        this.ThuTrongTuan = new List<DateTime>();
    //        this.ThuTrongTuanString = new List<string>();
    //        this.ChamCongNgayTrongTuan = new List<NgayTrongThang>();
    //    }
    //    /// <summary>
    //    /// Các thứ trong tuần
    //    /// </summary>
    //    public IList<DateTime> ThuTrongTuan { get; set; }
    //    /// <summary>
    //    /// Các thứ trong tuần
    //    /// </summary>
    //    public IList<string> ThuTrongTuanString { get; set; }
    //    /// <summary>
    //    /// Chấm Công Các ngày trong tuần
    //    /// </summary>
    //    public IList<NgayTrongThang> ChamCongNgayTrongTuan { get; set; }
    //}
}